package com.business.bean.oa;

import java.util.ArrayList;
import java.util.List;

import com.business.bean.system.UserBean;

import lombok.Getter;
import lombok.Setter;
import net.sf.rose.jdbc.bean.ModelBean;
import net.sf.rose.jdbc.bean.annotation.Column;
import net.sf.rose.jdbc.bean.annotation.Table;
import net.sf.rose.jdbc.bean.annotation.Type;

/**
 * 数据结构：
 * 一天一条调度记录
 * 一条调度记录对应多条工程调度记录
 * 一条工程调度记录对应多条附件记录，多条人员调度记录
 * 业务：
 * 项目经理派工申请：
 * 1、新增一条DispatchWorkBean记录，多条DispatchUserBean记录
 * 调度员人员调度：
 * 1、判断当日的DispatchBean记录是否存在，若没有则新增一条；
 * 2、若上一步是新增操作，将所有昨日的DispatchWorkBean记录全部查出，将所有当日的DispatchWorkBean记录全部查出，二者合并。当日没有则使用昨日的数据；
 * 3、DispatchUserApplyBean数据与第二步同；
 * 4、若工程已结束、不再需要分配项目工人，则可以删除DispatchWorkBean记录及下游的相关数据；
 * 5、调度工作就是生成DispatchUserApplyBean表的记录，所有的DispatchWorkBean的调度状态都结束时完成本日的工作调度；
 * 调度员分配项目：
 * 1、将DispatchUserApplyBean表中engineerID和projectID填充完整
 * 调度员工时确认：
 * 1、根据调度编号调出所有相关附件图片，生成每一个员工的工作日报ReportDay
 * @author fengjian E-mail: 9110530@qq.com
 * @version 创建时间：2019年9月21日
 */
@Setter
@Getter
@Table(name = "OA_DISPATCH", description = "调度表")
public class DispatchBean extends ModelBean {

	@Column(pk = true, type = Type.定长文本, description = "记录编号", canNull = false, size = 32, policy = "UUID")
	private String dispatchID = null;

	/** yyyy-mm-dd */
	@Column(type = Type.定长文本, description = "日期", size = 10)
	private String calendarDate = null;

	public static int TYPE_DISPATCH_IN = 1;
	public static int TYPE_DISPATCH_OK = 2;
	public static int TYPE_DISTRIBUTE_OK = 3;
	public static int TYPE_CONFIRM_OK = 4;
	public static int TYPE_CHECK_OK = 5;
	public static int TYPE_EXAMINE_OK = 6;

	/** 1：调度中；2：已调度；3：已分配；4：已确认；5：已校对；6：已审核 */
	@Column(type = Type.数字整型, description = "状态")
	private int status = 0;

	@Column(type = Type.定长文本, description = "调度员编号", size = 32)
	private String dispatcherID = null;

	@Column(type = Type.变长文本, description = "调度员姓名", size = 50)
	private transient String dispatcherName = null;

	// 工程调度列表
	private List<DispatchWorkBean> workList = new ArrayList<>();

	// 未分配工作人员列表
	private List<UserBean> noWorkUserList = new ArrayList<>();

}
